
//TODO a(5)
function a5(module, exports) {
    var a = a || function (e, t) {
            var a = {}, i = a.lib = {}, s = i.Base = function () {
                function e() {
                }

                return {
                    extend: function (t) {
                        e.prototype = this;
                        var a = new e;
                        return t && a.mixIn(t), a.$super = this, a
                    }, create: function () {
                        var e = this.extend();
                        return e.init.apply(e, arguments), e
                    }, init: function () {
                    }, mixIn: function (e) {
                        for (var t in e)e.hasOwnProperty(t) && (this[t] = e[t]);
                        e.hasOwnProperty("toString") && (this.toString = e.toString)
                    }, clone: function () {
                        return this.$super.extend(this)
                    }
                }
            }(), r = i.WordArray = s.extend({
                init: function (e, a) {
                    e = this.words = e || [], this.sigBytes = a != t ? a : 4 * e.length
                }, toString: function (e) {
                    return (e || o).stringify(this)
                }, concat: function (e) {
                    var t = this.words, a = e.words, i = this.sigBytes, e = e.sigBytes;
                    if (this.clamp(), i % 4)for (var s = 0; s < e; s++)t[i + s >>> 2] |= (a[s >>> 2] >>> 24 - 8 * (s % 4) & 255) << 24 - 8 * ((i + s) % 4); else if (65535 < a.length)for (s = 0; s < e; s += 4)t[i + s >>> 2] = a[s >>> 2]; else t.push.apply(t, a);
                    return this.sigBytes += e, this
                }, clamp: function () {
                    var t = this.words, a = this.sigBytes;
                    t[a >>> 2] &= 4294967295 << 32 - 8 * (a % 4), t.length = e.ceil(a / 4)
                }, clone: function () {
                    var e = s.clone.call(this);
                    return e.words = this.words.slice(0), e
                }, random: function (t) {
                    for (var a = [], i = 0; i < t; i += 4)a.push(4294967296 * e.random() | 0);
                    return r.create(a, t)
                }
            }), n = a.enc = {}, o = n.Hex = {
                stringify: function (e) {
                    for (var t = e.words, e = e.sigBytes, a = [], i = 0; i < e; i++) {
                        var s = t[i >>> 2] >>> 24 - 8 * (i % 4) & 255;
                        a.push((s >>> 4).toString(16)), a.push((15 & s).toString(16))
                    }
                    return a.join("")
                }, parse: function (e) {
                    for (var t = e.length, a = [], i = 0; i < t; i += 2)a[i >>> 3] |= parseInt(e.substr(i, 2), 16) << 24 - 4 * (i % 8);
                    return r.create(a, t / 2)
                }
            }, l = n.Latin1 = {
                stringify: function (e) {
                    for (var t = e.words, e = e.sigBytes, a = [], i = 0; i < e; i++)a.push(String.fromCharCode(t[i >>> 2] >>> 24 - 8 * (i % 4) & 255));
                    return a.join("")
                }, parse: function (e) {
                    for (var t = e.length, a = [], i = 0; i < t; i++)a[i >>> 2] |= (255 & e.charCodeAt(i)) << 24 - 8 * (i % 4);
                    return r.create(a, t)
                }
            }, d = n.Utf8 = {
                stringify: function (e) {
                    try {
                        return decodeURIComponent(escape(l.stringify(e)))
                    } catch (t) {
                        throw Error("Malformed UTF-8 data")
                    }
                }, parse: function (e) {
                    return l.parse(unescape(encodeURIComponent(e)))
                }
            }, h = i.BufferedBlockAlgorithm = s.extend({
                reset: function () {
                    this._data = r.create(), this._nDataBytes = 0
                }, _append: function (e) {
                    "string" == typeof e && (e = d.parse(e)), this._data.concat(e), this._nDataBytes += e.sigBytes
                }, _process: function (t) {
                    var a = this._data, i = a.words, s = a.sigBytes, n = this.blockSize, o = s / (4 * n), o = t ? e.ceil(o) : e.max((0 | o) - this._minBufferSize, 0), t = o * n, s = e.min(4 * t, s);
                    if (t) {
                        for (var l = 0; l < t; l += n)this._doProcessBlock(i, l);
                        l = i.splice(0, t), a.sigBytes -= s
                    }
                    return r.create(l, s)
                }, clone: function () {
                    var e = s.clone.call(this);
                    return e._data = this._data.clone(), e
                }, _minBufferSize: 0
            });
            i.Hasher = h.extend({
                init: function () {
                    this.reset()
                }, reset: function () {
                    h.reset.call(this), this._doReset()
                }, update: function (e) {
                    return this._append(e), this._process(), this
                }, finalize: function (e) {
                    return e && this._append(e), this._doFinalize(), this._hash
                }, clone: function () {
                    var e = h.clone.call(this);
                    return e._hash = this._hash.clone(), e
                }, blockSize: 16, _createHelper: function (e) {
                    return function (t, a) {
                        return e.create(a).finalize(t)
                    }
                }, _createHmacHelper: function (e) {
                    return function (t, a) {
                        return c.HMAC.create(e, a).finalize(t)
                    }
                }
            });
            var c = a.algo = {};
            return a
        }(Math);
    !function () {
        var e = a, t = e.lib.WordArray;
        e.enc.Base64 = {
            stringify: function (e) {
                var t = e.words, a = e.sigBytes, i = this._map;
                e.clamp();
                for (var e = [], s = 0; s < a; s += 3)for (var r = (t[s >>> 2] >>> 24 - 8 * (s % 4) & 255) << 16 | (t[s + 1 >>> 2] >>> 24 - 8 * ((s + 1) % 4) & 255) << 8 | t[s + 2 >>> 2] >>> 24 - 8 * ((s + 2) % 4) & 255, n = 0; 4 > n && s + .75 * n < a; n++)e.push(i.charAt(r >>> 6 * (3 - n) & 63));
                if (t = i.charAt(64))for (; e.length % 4;)e.push(t);
                return e.join("")
            }, parse: function (e) {
                var e = e.replace(/\s/g, ""), a = e.length, i = this._map, s = i.charAt(64);
                s && (s = e.indexOf(s), -1 != s && (a = s));
                for (var s = [], r = 0, n = 0; n < a; n++)if (n % 4) {
                    var o = i.indexOf(e.charAt(n - 1)) << 2 * (n % 4), l = i.indexOf(e.charAt(n)) >>> 6 - 2 * (n % 4);
                    s[r >>> 2] |= (o | l) << 24 - 8 * (r % 4), r++
                }
                return t.create(s, r)
            }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
        }
    }(), function (e) {
        function t(e, t, a, i, s, r, n) {
            return e = e + (t & a | ~t & i) + s + n, (e << r | e >>> 32 - r) + t
        }

        function i(e, t, a, i, s, r, n) {
            return e = e + (t & i | a & ~i) + s + n, (e << r | e >>> 32 - r) + t
        }

        function s(e, t, a, i, s, r, n) {
            return e = e + (t ^ a ^ i) + s + n, (e << r | e >>> 32 - r) + t
        }

        function r(e, t, a, i, s, r, n) {
            return e = e + (a ^ (t | ~i)) + s + n, (e << r | e >>> 32 - r) + t
        }

        var n = a, o = n.lib, l = o.WordArray, o = o.Hasher, d = n.algo, h = [];
        !function () {
            for (var t = 0; 64 > t; t++)h[t] = 4294967296 * e.abs(e.sin(t + 1)) | 0
        }(), d = d.MD5 = o.extend({
            _doReset: function () {
                this._hash = l.create([1732584193, 4023233417, 2562383102, 271733878])
            }, _doProcessBlock: function (e, a) {
                for (var n = 0; 16 > n; n++) {
                    var o = a + n, l = e[o];
                    e[o] = 16711935 & (l << 8 | l >>> 24) | 4278255360 & (l << 24 | l >>> 8)
                }
                for (var o = this._hash.words, l = o[0], d = o[1], c = o[2], p = o[3], n = 0; 64 > n; n += 4)16 > n ? (l = t(l, d, c, p, e[a + n], 7, h[n]), p = t(p, l, d, c, e[a + n + 1], 12, h[n + 1]), c = t(c, p, l, d, e[a + n + 2], 17, h[n + 2]), d = t(d, c, p, l, e[a + n + 3], 22, h[n + 3])) : 32 > n ? (l = i(l, d, c, p, e[a + (n + 1) % 16], 5, h[n]), p = i(p, l, d, c, e[a + (n + 6) % 16], 9, h[n + 1]), c = i(c, p, l, d, e[a + (n + 11) % 16], 14, h[n + 2]), d = i(d, c, p, l, e[a + n % 16], 20, h[n + 3])) : 48 > n ? (l = s(l, d, c, p, e[a + (3 * n + 5) % 16], 4, h[n]), p = s(p, l, d, c, e[a + (3 * n + 8) % 16], 11, h[n + 1]), c = s(c, p, l, d, e[a + (3 * n + 11) % 16], 16, h[n + 2]), d = s(d, c, p, l, e[a + (3 * n + 14) % 16], 23, h[n + 3])) : (l = r(l, d, c, p, e[a + 3 * n % 16], 6, h[n]), p = r(p, l, d, c, e[a + (3 * n + 7) % 16], 10, h[n + 1]), c = r(c, p, l, d, e[a + (3 * n + 14) % 16], 15, h[n + 2]), d = r(d, c, p, l, e[a + (3 * n + 5) % 16], 21, h[n + 3]));
                o[0] = o[0] + l | 0, o[1] = o[1] + d | 0, o[2] = o[2] + c | 0, o[3] = o[3] + p | 0
            }, _doFinalize: function () {
                var e = this._data, t = e.words, a = 8 * this._nDataBytes, i = 8 * e.sigBytes;
                for (t[i >>> 5] |= 128 << 24 - i % 32, t[(i + 64 >>> 9 << 4) + 14] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8), e.sigBytes = 4 * (t.length + 1), this._process(), e = this._hash.words, t = 0; 4 > t; t++)a = e[t], e[t] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8)
            }
        }), n.MD5 = o._createHelper(d), n.HmacMD5 = o._createHmacHelper(d)
    }(Math), function () {
        var e = a, t = e.lib, i = t.Base, s = t.WordArray, t = e.algo, r = t.EvpKDF = i.extend({
            cfg: i.extend({
                keySize: 4,
                hasher: t.MD5,
                iterations: 1
            }), init: function (e) {
                this.cfg = this.cfg.extend(e)
            }, compute: function (e, t) {
                for (var a = this.cfg, i = a.hasher.create(), r = s.create(), n = r.words, o = a.keySize, a = a.iterations; n.length < o;) {
                    l && i.update(l);
                    var l = i.update(e).finalize(t);
                    i.reset();
                    for (var d = 1; d < a; d++)l = i.finalize(l), i.reset();
                    r.concat(l)
                }
                return r.sigBytes = 4 * o, r
            }
        });
        e.EvpKDF = function (e, t, a) {
            return r.create(a).compute(e, t)
        }
    }(), a.lib.Cipher || function (e) {
        var t = a, i = t.lib, s = i.Base, r = i.WordArray, n = i.BufferedBlockAlgorithm, o = t.enc.Base64, l = t.algo.EvpKDF, d = i.Cipher = n.extend({
            cfg: s.extend(),
            createEncryptor: function (e, t) {
                return this.create(this._ENC_XFORM_MODE, e, t)
            },
            createDecryptor: function (e, t) {
                return this.create(this._DEC_XFORM_MODE, e, t)
            },
            init: function (e, t, a) {
                this.cfg = this.cfg.extend(a), this._xformMode = e, this._key = t, this.reset()
            },
            reset: function () {
                n.reset.call(this), this._doReset()
            },
            process: function (e) {
                return this._append(e), this._process()
            },
            finalize: function (e) {
                return e && this._append(e), this._doFinalize()
            },
            keySize: 4,
            ivSize: 4,
            _ENC_XFORM_MODE: 1,
            _DEC_XFORM_MODE: 2,
            _createHelper: function () {
                return function (e) {
                    return {
                        encrypt: function (t, a, i) {
                            return ("string" == typeof a ? f : g).encrypt(e, t, a, i)
                        }, decrypt: function (t, a, i) {
                            return ("string" == typeof a ? f : g).decrypt(e, t, a, i)
                        }
                    }
                }
            }()
        });
        i.StreamCipher = d.extend({
            _doFinalize: function () {
                return this._process(!0)
            }, blockSize: 1
        });
        var h = t.mode = {}, c = i.BlockCipherMode = s.extend({
            createEncryptor: function (e, t) {
                return this.Encryptor.create(e, t)
            }, createDecryptor: function (e, t) {
                return this.Decryptor.create(e, t);
            }, init: function (e, t) {
                this._cipher = e, this._iv = t
            }
        }), h = h.CBC = function () {
            function t(t, a, i) {
                var s = this._iv;
                s ? this._iv = e : s = this._prevBlock;
                for (var r = 0; r < i; r++)t[a + r] ^= s[r]
            }

            var a = c.extend();
            return a.Encryptor = a.extend({
                processBlock: function (e, a) {
                    var i = this._cipher, s = i.blockSize;
                    t.call(this, e, a, s), i.encryptBlock(e, a), this._prevBlock = e.slice(a, a + s)
                }
            }), a.Decryptor = a.extend({
                processBlock: function (e, a) {
                    var i = this._cipher, s = i.blockSize, r = e.slice(a, a + s);
                    i.decryptBlock(e, a), t.call(this, e, a, s), this._prevBlock = r
                }
            }), a
        }(), p = (t.pad = {}).Pkcs7 = {
            pad: function (e, t) {
                for (var a = 4 * t, a = a - e.sigBytes % a, i = a << 24 | a << 16 | a << 8 | a, s = [], n = 0; n < a; n += 4)s.push(i);
                a = r.create(s, a), e.concat(a)
            }, unpad: function (e) {
                e.sigBytes -= 255 & e.words[e.sigBytes - 1 >>> 2]
            }
        };
        i.BlockCipher = d.extend({
            cfg: d.cfg.extend({mode: h, padding: p}), reset: function () {
                d.reset.call(this);
                var e = this.cfg, t = e.iv, e = e.mode;
                if (this._xformMode == this._ENC_XFORM_MODE)var a = e.createEncryptor; else a = e.createDecryptor, this._minBufferSize = 1;
                this._mode = a.call(e, this, t && t.words)
            }, _doProcessBlock: function (e, t) {
                this._mode.processBlock(e, t)
            }, _doFinalize: function () {
                var e = this.cfg.padding;
                if (this._xformMode == this._ENC_XFORM_MODE) {
                    e.pad(this._data, this.blockSize);
                    var t = this._process(!0)
                } else t = this._process(!0), e.unpad(t);
                return t
            }, blockSize: 4
        });
        var u = i.CipherParams = s.extend({
            init: function (e) {
                this.mixIn(e)
            }, toString: function (e) {
                return (e || this.formatter).stringify(this)
            }
        }), h = (t.format = {}).OpenSSL = {
            stringify: function (e) {
                var t = e.ciphertext, e = e.salt, t = (e ? r.create([1398893684, 1701076831]).concat(e).concat(t) : t).toString(o);
                return t = t.replace(/(.{64})/g, "$1\n")
            }, parse: function (e) {
                var e = o.parse(e), t = e.words;
                if (1398893684 == t[0] && 1701076831 == t[1]) {
                    var a = r.create(t.slice(2, 4));
                    t.splice(0, 4), e.sigBytes -= 16
                }
                return u.create({ciphertext: e, salt: a})
            }
        }, g = i.SerializableCipher = s.extend({
            cfg: s.extend({format: h}), encrypt: function (e, t, a, i) {
                var i = this.cfg.extend(i), s = e.createEncryptor(a, i), t = s.finalize(t), s = s.cfg;
                return u.create({
                    ciphertext: t,
                    key: a,
                    iv: s.iv,
                    algorithm: e,
                    mode: s.mode,
                    padding: s.padding,
                    blockSize: e.blockSize,
                    formatter: i.format
                })
            }, decrypt: function (e, t, a, i) {
                return i = this.cfg.extend(i), t = this._parse(t, i.format), e.createDecryptor(a, i).finalize(t.ciphertext)
            }, _parse: function (e, t) {
                return "string" == typeof e ? t.parse(e) : e
            }
        }), t = (t.kdf = {}).OpenSSL = {
            compute: function (e, t, a, i) {
                return i || (i = r.random(8)), e = l.create({keySize: t + a}).compute(e, i), a = r.create(e.words.slice(t), 4 * a), e.sigBytes = 4 * t, u.create({
                    key: e,
                    iv: a,
                    salt: i
                })
            }
        }, f = i.PasswordBasedCipher = g.extend({
            cfg: g.cfg.extend({kdf: t}), encrypt: function (e, t, a, i) {
                return i = this.cfg.extend(i), a = i.kdf.compute(a, e.keySize, e.ivSize), i.iv = a.iv, e = g.encrypt.call(this, e, t, a.key, i), e.mixIn(a), e
            }, decrypt: function (e, t, a, i) {
                return i = this.cfg.extend(i), t = this._parse(t, i.format), a = i.kdf.compute(a, e.keySize, e.ivSize, t.salt), i.iv = a.iv, g.decrypt.call(this, e, t, a.key, i)
            }
        })
    }(), function () {
        var e = a, t = e.lib.BlockCipher, i = e.algo, s = [], r = [], n = [], o = [], l = [], d = [], h = [], c = [], p = [], u = [];
        !function () {
            for (var e = [], t = 0; 256 > t; t++)e[t] = 128 > t ? t << 1 : t << 1 ^ 283;
            for (var a = 0, i = 0, t = 0; 256 > t; t++) {
                var g = i ^ i << 1 ^ i << 2 ^ i << 3 ^ i << 4, g = g >>> 8 ^ 255 & g ^ 99;
                s[a] = g, r[g] = a;
                var f = e[a], v = e[f], m = e[v], _ = 257 * e[g] ^ 16843008 * g;
                n[a] = _ << 24 | _ >>> 8, o[a] = _ << 16 | _ >>> 16, l[a] = _ << 8 | _ >>> 24, d[a] = _, _ = 16843009 * m ^ 65537 * v ^ 257 * f ^ 16843008 * a, h[g] = _ << 24 | _ >>> 8, c[g] = _ << 16 | _ >>> 16, p[g] = _ << 8 | _ >>> 24, u[g] = _, a ? (a = f ^ e[e[e[m ^ f]]], i ^= e[e[i]]) : a = i = 1
            }
        }();
        var g = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], i = i.AES = t.extend({
            _doReset: function () {
                for (var e = this._key, t = e.words, a = e.sigBytes / 4, e = 4 * ((this._nRounds = a + 6) + 1), i = this._keySchedule = [], r = 0; r < e; r++)if (r < a) i[r] = t[r]; else {
                    var n = i[r - 1];
                    r % a ? 6 < a && 4 == r % a && (n = s[n >>> 24] << 24 | s[n >>> 16 & 255] << 16 | s[n >>> 8 & 255] << 8 | s[255 & n]) : (n = n << 8 | n >>> 24, n = s[n >>> 24] << 24 | s[n >>> 16 & 255] << 16 | s[n >>> 8 & 255] << 8 | s[255 & n], n ^= g[r / a | 0] << 24), i[r] = i[r - a] ^ n
                }
                for (t = this._invKeySchedule = [], a = 0; a < e; a++)r = e - a, n = a % 4 ? i[r] : i[r - 4], t[a] = 4 > a || 4 >= r ? n : h[s[n >>> 24]] ^ c[s[n >>> 16 & 255]] ^ p[s[n >>> 8 & 255]] ^ u[s[255 & n]]
            }, encryptBlock: function (e, t) {
                this._doCryptBlock(e, t, this._keySchedule, n, o, l, d, s)
            }, decryptBlock: function (e, t) {
                var a = e[t + 1];
                e[t + 1] = e[t + 3], e[t + 3] = a, this._doCryptBlock(e, t, this._invKeySchedule, h, c, p, u, r), a = e[t + 1], e[t + 1] = e[t + 3], e[t + 3] = a
            }, _doCryptBlock: function (e, t, a, i, s, r, n, o) {
                for (var l = this._nRounds, d = e[t] ^ a[0], h = e[t + 1] ^ a[1], c = e[t + 2] ^ a[2], p = e[t + 3] ^ a[3], u = 4, g = 1; g < l; g++)var f = i[d >>> 24] ^ s[h >>> 16 & 255] ^ r[c >>> 8 & 255] ^ n[255 & p] ^ a[u++], v = i[h >>> 24] ^ s[c >>> 16 & 255] ^ r[p >>> 8 & 255] ^ n[255 & d] ^ a[u++], m = i[c >>> 24] ^ s[p >>> 16 & 255] ^ r[d >>> 8 & 255] ^ n[255 & h] ^ a[u++], p = i[p >>> 24] ^ s[d >>> 16 & 255] ^ r[h >>> 8 & 255] ^ n[255 & c] ^ a[u++], d = f, h = v, c = m;
                f = (o[d >>> 24] << 24 | o[h >>> 16 & 255] << 16 | o[c >>> 8 & 255] << 8 | o[255 & p]) ^ a[u++], v = (o[h >>> 24] << 24 | o[c >>> 16 & 255] << 16 | o[p >>> 8 & 255] << 8 | o[255 & d]) ^ a[u++], m = (o[c >>> 24] << 24 | o[p >>> 16 & 255] << 16 | o[d >>> 8 & 255] << 8 | o[255 & h]) ^ a[u++], p = (o[p >>> 24] << 24 | o[d >>> 16 & 255] << 16 | o[h >>> 8 & 255] << 8 | o[255 & c]) ^ a[u++], e[t] = f, e[t + 1] = v, e[t + 2] = m, e[t + 3] = p
            }, keySize: 8
        });
        e.AES = t._createHelper(i)
    }(), module.exports = a
}
